package com.note.feng.leetcode.algorithms.easy.eleven;

public class ThousandHundredFiftyFour {

    /**
     * 1154 一年中的第几天
     * 给你一个字符串 date ，按 YYYY-MM-DD 格式表示一个 现行公元纪年法 日期。返回该日期是当年的第几天。
     *
     * 示例 1：
     *
     * 输入：date = "2019-01-09"
     * 输出：9
     * 解释：给定日期是2019年的第九天。
     * 示例 2：
     *
     * 输入：date = "2019-02-10"
     * 输出：41
     *
     * 提示：
     *
     * date.length == 10
     * date[4] == date[7] == '-'，其他的 date[i] 都是数字
     * date 表示的范围从 1900 年 1 月 1 日至 2019 年 12 月 31 日
     *
     * 来源：力扣（LeetCode）
     * 链接：https://leetcode.cn/problems/day-of-the-year
     */
    /**
     * 解法：直接计算
     * 1.根据字符串达到年、月、日信息
     * 2.闰年并且月份大于2月的，天数需要 + 1
     * 3.初始化月份天数数组
     * 4.遍历数组得到天数
     * 闰年的判断：能被 400 整除，或者 能被 4 整除且不能被 100 整除
     * @param date
     * @return
     */
    public int dayOfYear(String date) {
        int year = Integer.valueOf(date.substring(0,4));
        int month = Integer.valueOf(date.substring(5,7)) - 1;
        int day = Integer.valueOf(date.substring(8));
        int [] days = new int[] {31,28,31,30,31,30,31,31,30,31,30,31};
        int diff = month > 1 && (year % 400 == 0 || (year % 4 == 0 && year % 100 != 0)) ? -1 : 0;
        int res = day;
        for (int i = 0; i < month; i++) {
            res += days[i];
        }
        return res + diff;
    }
}
